home *** CD-ROM | disk | FTP | other *** search
- // E_S.H
- // (C) Anubis Software Enero 1995
- // Esta librería proporciona una ayuda con la E/S del sistema
- // está sacada del libro "Lenguaje C Biblioteca de Funciones"
-
- // -----------------------------------------+
- // Inclusion de librerías de Borland C++ |
- // -----------------------------------------+
- #include <conio.h>
-
- // -----------------------------------------+
- // Implementación de las funciones |
- // -----------------------------------------+
-
- /* NOMBRE: leer_car()
- * FUNCION: Lee un carácter introducido por el teclado
- * y suprime el contenido del buffer E/S. Si su
- * rutina pide 2 caracteres en una fila con
- * getchar(), el segundo carácter retornado es el retorno
- * de carro para la primera entrada. Por ejemplo:
- *
- * x=getchar();
- * y=getchar();
- *
- * se asigna x al carácter introducido, no obstante
- * el retorno de carro está todavía en el buffer de entrada
- * y se asigna a y. leer_car() destruye el
- * contenido del buffer de entrada antes de volver.
- *
- * Si EOF ocurre, leer_car() retorna el valor EOF.
- */
- leer_car ()
- {
- int letra; /* letra que se devuelve a la rutina que llama */
- int buffer; /* los datos que permanecen en el buffer de entrada
- se leen en el buffer */
- letra = getchar(); /* obtener la respuesta */
- buffer = letra;
- */ obtener caracteres hasta que el buffer de entrada está vacio */
- while( buffer != EOL && buffer != EOF)
- buffer = getchar();
- return ((buffer != EOF) ? letra : EOF);
- }// end leer_car
-
-
- /* NOMBRE: escribirln (cadena)
- * FUNCION: Escribe la cadena en la salida estándar asegurando que solamente se
- * escribe un carácter de nueva linea. Si se lee una línea de un fichero,
- * no tenemos forma de saber si contiene o no un carácter de nueva línea.
- * Si suponemos que lo hace y no están presentes, la salida consistirá en
- * una línea. Si suponemos que no lo hace y lo hace, cada línea es a
- * doble espacio.
- * escribirln() elimina este problema.
- */
- escribirln (char *cadena)
- {
- while( *cadena != EOL && *cadena != NULL)
- putchar( *cadena++);
- putchar(NUEVALINEA);
- }// end escribirln
-
-
- /* NOMBRE: escribir_consola (cadena)
- * FUNCION: Escribe la cadena en la consola asegurando que no se escribe un
- * carácter de nueva linea. La mayoría de los compiladores proporcionan
- * algunas definiciones para consola de E/S que están colocadas
- * normalmente en el fichero conio.h ( consola E/S). El identificador
- * imprimir_car ha sido definido en el fichero defn.h para la correcta
- * rutina de E/S de consola.
- */
- escribir_consola(char * cadena)
- {
- while (*cadena != EOL && *cadena != NULL)
- imprimir_car(*cadena++); /* ver defn.h para la definición */
- /* de imprimir_car() */
- }// end escribir_consola
-
-
- /* NOMBRE: fescribir (puntero_fichero, cadena)
- * FUNCION: Escribe la cadena en el fichero especificado con puntero_fichero
- * asegurando que una nueva línea de caracteres no se escribe.
- */
- fescribir (FILE *puntero_fichero, char *cadena)
- {
- while (*cadena != EOL && *cadena != NULL)
- putc(*cadena++, puntero_fichero);
- }// end fescribir
-
-
- /* NOMBRE: fescribirln (puntero_fichero, cadena)
- * FUNCION: escribe la cadena en el fichero referenciado por puntero_fichero
- * asegurando que solamente se escribe un carácter de nueva línea. Si se
- * lee una línea de un fichero, no tenemos forma de saber si contiene o
- * no un carácter de nueva línea. Si suponemos que lo hace, y no están
- * presentes la salida consistirá en una línea de largo. Si suponemos que
- * fescribirln() elimina este problema.
- */
- fescribirln ( FILE *puntero_fichero, char *cadena)
- {
- while (*cadena != EOL && *cadena != NULL)
- putc(*cadena++, puntero_fichero);
- putc(NUEVALINEA, puntero_fichero);
- }// end fescribirln
-
-
- /* NOMBRE: leer_cadena(cadena)
- * FUNCION: Lee una cadena introducida por el usuario y sustituye el retorno de
- * carro con NULL. Si ocurre final de fichero, leer cadena() retorna el
- * valor EOF; en otro caso, leer_cadena() retorna el valor NO_ERROR.
- */
- leer_cadena(char *cadena)
- {
- int letra;
- while((letra = getchar() ) != EOL && letra != EOF)
- *cadena++ = letra;
- *cadena =NULL; /*reemplazar el retorno de carro con NULL */
- return((letra == EOF) ? EOF : NO_ERROR);
- }// end leer_cadena
-
-
- /* NOMBRE: leerln(cadena)
- * FUNCION: Lee una cadena introducida por el usuario y añade NULL.
- * El retorno de carro permanece en la cadena. Si ocurre final de
- * fichero, leerln() retorna el valor EOF; en otro caso, leerln() retorna
- * el valor NO_ERROR.
- */
- leerln( char *cadena)
- {
- int letra; /* variable utilizada para verificar EOF */
- while ((letra = getchar() ) != EOL && letra != EOF)
- *cadena++ = letra;
- *cadena = NULL; /*añadir NULL */
- return ((letra == EOF) ? EOF : NO_ERROR);
- }// end leerln
-
- /* NOMBRE: peticion_respuesta ( peticion, respuesta)
- * FUNCION: Pide al usuario una respuesta válida y retorna una cadena de
- * caracteres conteniendo la respuesta. Si ocurre un final de fichero,
- * peticion_respuesta() retorna EOF; en otro caso; peticion_respuesta()
- * retorna NO_ERROR.
- */
- peticion_respuesta ( char *peticion, char *respuesta)
- {
- int no_valido = true; /* FALSE cuando la respuesta es válida */
- int letra; /* letra leída del usuario para
- respuesta S o N */
- while ( no_valido) {
- escribirln( peticion); /*petición al usuario */
- if (leer_cadena (respuesta) == EOF)
- return(EOF);
- printf("Es %s correcto? (S/N) \n, respuesta); /*validar */
- if (( letra = leer_car()) == EOF)
- return(EOF);
- if (indice_car ("Ss", letra) != -1)
- no_valido = FALSE;
- }// end while
- return (NO_ERROR);
- }// end peticion_respuesta
-
-
- /* NOMBRE: obtener_respuesta (respuesta)
- * FUNCION: Obtiene una respuesta del usuario válida y retorna la cadena de
- * caracteres conteniendo la respuesta. Si ocurre un final de fichero,
- * obtener_respuesta() retorna el valor EOF; en otro caso obtener_
- * respueta() retorna NO_ERROR.
- */
- obtener_respuesta( char *respuesta)
- {
- int no_valido = TRUE; /* FALSE cuando la respuesta es válida */
- int letra; /* letra leída del usuario para
- respuestas S o N */
- while ( no_valido) {
- if ( leer_cadena (respuesta) == EOF) /* obtener la respuesta */
- return ( EOF);
- printf ("Es %s correcto? (S/N) \n", respuesta); /* validar */
- letra = leer_car();
- if (indice_car ( "Ss", letra != -1)
- no_valido = FALSE;
- else
- printf( "Introducir respuesta correcta. \n");
- }// end while
- return(NO_ERROR);
- }// end obtener_respuesta
-
-
- /* NOMBRE: peticion_ent ( peticion)
- * FUNCION: Pide al usuario que introduzca un valor entero, valida el valor y lo
- * retorna a la rutina de llamada. Si el usuario continua introduciendo
- * datos no válidos, la rutina continuará pidiendo al usuario datos
- * correctos. Si ocurre EOF, peticion_ent() retorna el valor 0.
- */
- peticion_ent( char *peticion)
- {
- int no_valido = TRUE; /* FALSE cuando se introduce un entero válido */
- int resultado; /* valor a retornar a la rutina de llamada */
- char val_ascii[MAX_STRING]; /* dato introducido por el usuario */
- while (no_valido) {
- puts (peticion); /* petición al usuario */
- if (leer_cadena (valor_ascii) == EOF) /* obtener la entrada */
- return (0);
- /* convertir la cadena al valor entero correspondiente */
- if (convertir_ent (val_ascii, &resultado) == NO_ERROR)
- no_valido = FALSE;
- else
- printf ("Dato inválido introducido. Introducir valor entero. \n");
- }// end while
- return( resultado); /* valor entero válido */
- }// end peticion_ent
-
- /* NOMBRE: obtener_entero()
- * FUNCION: Retorna nu valor entero válido sin petición del usuario.
- * Si ocurre un final de fichero, obtener_entero() retorna el valor 0.
- */
-
-